Python 常见内置函数(二)
本文作者:智淼,中南财经政法大学统计与数学学院
本文编辑:周一鸣
技术总编:王玉婷
Stata and Python 数据分析
爬虫俱乐部Stata基础课程、Stata进阶课程和Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~当我们遇到字符串形式或字节码形式的表达式时,可以使用函数eval()动态评估该表达式,并返回表达式的值。eval()会对传递进来的表达式进行解析,将其编译为字节码(如果表达式为字节码,则跳过这一步),然后计算Python表达式,最后返回评估结果。
eval(expression, globals, locals) # 语法
globals(可选):变量作用域,全局命名空间,必须是字典形式。
locals(可选):变量作用域,局部命名空间,可以是任何映射。
表达式允许字符串形式或字节码形式。
x=2 # 定义一个全局变量
evalExample= eval("x*x+1") # 字符串表达式
print("表达式为字符串:"+str(evalExample))
code = compile("x*x+1", "<string>", "eval") # 字节代码
print("表达式为字节代码:"+str(eval(code)))
print("参数locals:"+str(eval("a + b", {"a":100, "b": 20}))) # 局部变量
input()接收输入数据,并返回为字符串类型结果,而eval()接收字符串形式的表达式,输出数值型结果。
inputExample= input("输入数学表达式:")
print(inputExample) # input
print(type(inputExample))
print(evalExample) # eval
print(type(evalExample))
输入“2**3”,运行结果如下:
eval()可以将字符串转化为相应的数字类型,包括元组、列表、数组等, 但input()的输出类型只能为字符串。
inputExample= input("请输入一个列表:") # 输入列表[1,2,3]
print(inputExample)
print(type(inputExample))
evalExample= eval(input("请输入一个列表:")) # 输入列表[1,2,3]
print(evalExample)
print(type(evalExample))
输入"[1,2,3]",运行结果如下:
该函数和split()的功能相反,split()可以使用指定分隔符对字符串进行切割,而join()将可迭代对象中的元素(元素必须为字符串类型)用给定的分隔符连接起来,并返回该字符串。
stringSeparator.join(iterable) # 语法
iterable:可迭代对象,包括列表、元组、字典等,要求可迭代对象中的元素必须是字符串类型。
stringSeparator:分隔符必须为字符串类型,可以为空格、空字符串、换行符等。
我们可以使用任意的字符作为间隔符,也可以将间隔符设置为空字符串,从而直接连接可迭代对象中的元素。
a= ["爬", "虫", "俱", "乐", "部"]
print("查看原始列表:"+str(a)+"\n")
# 使用"-"作为间隔符
joinBy= "-"
joinedString = joinBy.join(a)
print("使用'-'作为间隔符:"+str(joinedString)+"\n")
# 不使用间隔符
print("不使用间隔符:"+str("".join(a)))
运行结果如下:
需要注意的是元素必须为字符串形式,否则无法执行。
# 必须是字符串形式
b = ("爬", "虫", "俱", "乐", "部", "NO.", 1)
joinBy= "-"
joinedString = joinBy.join(b)
print(joinedString)
运行结果如下,非字符串的形式将报错:
和join()的功能类似,os.path.join()是对路径名进行组合。Python中的OS模块提供了与操作系统交互的功能。os.path模块是OS模块的子模块,用于常见的路径名操作。os.path.join()可以连接一个或多个路径组件,并在路径组件之间使用目录分隔符('/')连接,返回连接后的字符串形式的路径。
os.path.join(path, *path) # 语法
其中,path表示文件系统路径的类路径对象,即表示路径的字符串;*path表示要连接的路径组件,和*args的功能一样,用于将可变数量的参数传递给函数。
如果最后一个路径组件为空,则将目录分隔符('/')放在末尾。
import os
path = "/Users"
print(os.path.join(path, "Desktop/python", "file.txt"))
print(os.path.join(path, "Desktop/python", "file.txt", "")) # 最后一个路径组件为空
运行结果如下:
如果使用绝对路径,则绝对路径之前的路径(比如下面的/Users)会被丢弃。同时,在路径组件中,按照从后往前的顺序,会从第一个使用绝对路径的位置开始拼接,之前的路径组件会被全部丢弃。
path = "/Users"
print(os.path.join(path, "/python", "file.txt")) # 绝对路径前的路径被丢弃
print(os.path.join(path, "file.txt","/python")) # 绝对路径前的路径组件被丢弃
运行结果如下:
需要注意的是,os.path.join()只是起到组合路径组件的作用,如果想要生成该路径目录或文件,可以使用os.mkdir(os.path.join())。
有时我们输入数据时会无意中输入多余的空格,而在某些场景下需要删除字符串首尾的字符,strip()为我们提供一种简便的方法,用于删除原始字符串开头和结尾特定的字符或空白符。
string.strip([characters]) # 语法
string:表示需要处理的原始字符串。
characters:需要从原始字符串中删去的前导或尾随字符。如果不指定,默认删去空白字符,如空格、换行符、制表符、回车符等。
在下例中,我们想要删去"***本文来自爬虫俱乐部!***"这句话两端的星号(*),使用strip()函数实现:
stringExample1 = "***本文来自爬虫俱乐部!***"
print("原始字符串:"+ stringExample1+"\n")
s1 = stringExample1.strip("*") # 删去原始字符串两端的*
print("删去两端的*:"+ s1 + "\n")
运行结果如下:
还可以同时删除多个字符:
s2 = stringExample1.strip("*").strip("!") # 同时删去多个字符
print("删去*和!:"+ s2 + "\n")
运行结果如下:
如果仅要删去字符串左端的符号,可以使用lstrip();如果仅要删去字符串右端的符号,可以使用rstrip(),使用方法和strip()一致。
但是如果想要删去的字符不在原始字符串的首尾,strip()就无法删除该字符。
stringExample2 = "本文来自??爬虫俱乐部!"
print("原始字符串:"+ stringExample2+"\n")
s3 = stringExample2.strip("?") # 无法删去字符串内部的符号
print("无法删去'?':"+ s3 + "\n")
运行结果如下:
casefold()可以将字符串内所有大写字母转换为小写或“折叠”形式。
string.casefold() # 语法
接下来我们看一个简单的例子:
text1 = "PYTHON IS FUN!"
print("使用casefold(): "+text1.casefold())
print("使用lower(): "+text1.lower())
运行结果如下:
casefold()和lower()的输出结果看似一致,那么我们为什么还要使用运行时间更长的函数casefold()呢?接下来我们再看一个例子:
text2 = "groß" # ß
print("使用lower():"+text2.lower()+"\n")
print("使用casefold():"+text2.casefold()+"\n")
text3 = "ς" # sigma
print("使用lower():"+text3.lower()+"\n")
print("使用casefold():"+text3.casefold()+"\n")
运行结果如下:
其中,ß
是德文字母。ς
是希腊字母(即sigma),其大写形式为Σ
,小写形式为 σ
。
可以看到,lower()并没有达到我们的预期,这是由于lower()只允许标准ASCII的文本,即只对A-Z有效。casefold()允许文本使用Unicode编码,可以将非英文语言的大写字母转换为小写。但casefold()并不是单纯地将大写字母转换为小写字母,正如该函数的名字,casefold()是将字母“折叠”成一种形式(通常是小写),使字母之间更为相似以便比较。这样,无论σ
, ς
, 和 Σ
出现在哪里, 它们就都可以比较了。因此casefold()在处理国际化文本的信息方面十分有效。
以上就是对python中内置函数eval()、join()、strip()、casefold()的介绍,快来动手试试吧!
重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
Stata绘制饼形图的进阶用法
Python标准库--logging模块盲区探索——Stata的读写极限Camelot提取PDF表格:一页多表、多页一表Stata绘图系列——条形图绘制
Python常见内置函数(一)Stata绘图系列——饼形图绘制【爬虫实战】深交所服务业年报数据“挂羊头卖狗肉”?
Python与excel交互--xlsxwriter模块cnmapsearch——离公司最近的快餐店在哪
Python中的异常处理 Python交互式数据可视化——酷炫的Altair库 hk系列命令(3)—— hktrade hk系列命令(2)—— hkar hk系列命令(1)—— hkstock 超好用的字符串方法 基于Python的假设检验实现关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。